/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/*
 * AsignaturasFrame.java
 *
 * Created on 04-ene-2012, 14:19:12
 */
package occho.view;

import java.sql.SQLException;
import java.util.*;
import javax.swing.JOptionPane;
import javax.swing.JTree;
import javax.swing.tree.*;
import occho.model.*;
import occho.view.resources.Messages;

/**
 *
 * @author Jorge
 */
public class AsignaturasFrame extends javax.swing.JInternalFrame implements Observer, Internacionalizable {

    Usuario usuario;
    DefaultMutableTreeNode ultimoNodo;
    FachadaGestionAsignaturas fachada;

    /** Creates new form AsignaturasFrame
     * @param user 
     */
    public AsignaturasFrame(Usuario user) {
        initComponents();
        this.usuario = user;
        user.addObserver(this);
        this.fachada = new FachadaGestionAsignaturas(user);

        cambiarAsignatura(false);
        cambiarTema(false);
        cambiarPregunta(false);
        cambiarRespuesta(false);
        
        setLenguaje();

        DefaultMutableTreeNode top = new DefaultMutableTreeNode("Asignaturas");
        createNodes(top);
        DefaultTreeModel modelo = new DefaultTreeModel(top);

        this.asignaturasTree.setModel(modelo);
        this.asignaturasTree.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);
        expandAll(asignaturasTree, true);
    }

    private void createNodes(DefaultMutableTreeNode top) {
        DefaultMutableTreeNode asignatura = null;
        DefaultMutableTreeNode tema = null;
        DefaultMutableTreeNode pregunta = null;
        DefaultMutableTreeNode respuesta = null;

        if (this.usuario.getAsignaturas() != null) {
            for (Asignatura asig : this.usuario.getAsignaturas()) {
                asignatura = new DefaultMutableTreeNode(asig);
                top.add(asignatura);

                for (Tema tem : asig.getTemas()) {
                    tema = new DefaultMutableTreeNode(tem);
                    asignatura.add(tema);

                    for (Pregunta preg : tem.getPreguntas()) {
                        pregunta = new DefaultMutableTreeNode(preg);
                        tema.add(pregunta);

                        for (Respuesta resp : preg.getRespuestas()) {
                            respuesta = new DefaultMutableTreeNode(resp);
                            pregunta.add(respuesta);
                        }
                    }
                }
            }
        }
    }

    private void borrarTextos() {
        this.asigText.setText("");
        this.temaText.setText("");
        this.preguntaText.setText("");
        this.respuestaText.setText("");
    }

    private void cambiarAsignatura(boolean b) {
        this.arribaTabbed.setEnabledAt(0, b);
        this.asigLabel.setEnabled(b);
        this.asigText.setEnabled(b);
        this.asigButton.setEnabled(b);
    }

    private void cambiarTema(boolean b) {
        this.arribaTabbed.setEnabledAt(1, b);
        this.temaLabel.setEnabled(b);
        this.temaText.setEnabled(b);
        this.temaButton.setEnabled(b);
    }

    private void cambiarPregunta(boolean b) {
        this.abajoTabbed.setEnabledAt(0, b);
        this.preguntaLabel.setEnabled(b);
        this.preguntaText.setEnabled(b);
        this.preguntaButton.setEnabled(b);
    }

    private void cambiarRespuesta(boolean b) {
        this.abajoTabbed.setEnabledAt(1, b);
        this.respuestaLabel.setEnabled(b);
        this.respuestaText.setEnabled(b);
        this.respuestaButton.setEnabled(b);
    }

    private void expandAll(JTree tree, boolean expand) {
        TreeNode root = (TreeNode) tree.getModel().getRoot();

        // Traverse tree from root
        expandAll(tree, new TreePath(root), expand);
    }

    private void expandAll(JTree tree, TreePath parent, boolean expand) {
        // Traverse children
        TreeNode node = (TreeNode) parent.getLastPathComponent();
        if (node.getChildCount() >= 0) {
            for (Enumeration e = node.children(); e.hasMoreElements();) {
                TreeNode n = (TreeNode) e.nextElement();
                TreePath path = parent.pathByAddingChild(n);
                expandAll(tree, path, expand);
            }
        }
        if (expand) {
            tree.expandPath(parent);
        } else {
            tree.collapsePath(parent);
        }
    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        arbolPanel = new javax.swing.JScrollPane();
        asignaturasTree = new javax.swing.JTree();
        arribaTabbed = new javax.swing.JTabbedPane();
        asignaturaPanel = new javax.swing.JPanel();
        asigLabel = new javax.swing.JLabel();
        asigText = new javax.swing.JTextField();
        asigButton = new javax.swing.JButton();
        borrarAsigButton = new javax.swing.JButton();
        temaPanel = new javax.swing.JPanel();
        temaLabel = new javax.swing.JLabel();
        temaText = new javax.swing.JTextField();
        temaButton = new javax.swing.JButton();
        borrarTemaButton = new javax.swing.JButton();
        abajoTabbed = new javax.swing.JTabbedPane();
        preguntaPanel = new javax.swing.JPanel();
        preguntaLabel = new javax.swing.JLabel();
        preguntaScrollPane = new javax.swing.JScrollPane();
        preguntaText = new javax.swing.JTextArea();
        preguntaButton = new javax.swing.JButton();
        borrarPregButton = new javax.swing.JButton();
        respuestaPanel = new javax.swing.JPanel();
        respuestaLabel = new javax.swing.JLabel();
        respuestaScrollPane = new javax.swing.JScrollPane();
        respuestaText = new javax.swing.JTextArea();
        respuestaButton = new javax.swing.JButton();
        borrarRespButton = new javax.swing.JButton();
        correctaCheckBox = new javax.swing.JCheckBox();

        setClosable(true);
        setName("Form"); // NOI18N
        setPreferredSize(new java.awt.Dimension(640, 460));

        arbolPanel.setName("arbolPanel"); // NOI18N

        javax.swing.tree.DefaultMutableTreeNode treeNode1 = new javax.swing.tree.DefaultMutableTreeNode("root");
        asignaturasTree.setModel(new javax.swing.tree.DefaultTreeModel(treeNode1));
        asignaturasTree.setName("asignaturasTree"); // NOI18N
        asignaturasTree.addTreeSelectionListener(new javax.swing.event.TreeSelectionListener() {
            public void valueChanged(javax.swing.event.TreeSelectionEvent evt) {
                asignaturasTreeValueChanged(evt);
            }
        });
        arbolPanel.setViewportView(asignaturasTree);

        arribaTabbed.setName("arribaTabbed"); // NOI18N

        asignaturaPanel.setEnabled(false);
        asignaturaPanel.setName("asignaturaPanel"); // NOI18N

        org.jdesktop.application.ResourceMap resourceMap = org.jdesktop.application.Application.getInstance(occho.OcchoApp.class).getContext().getResourceMap(AsignaturasFrame.class);
        asigLabel.setText(resourceMap.getString("asigLabel.text")); // NOI18N
        asigLabel.setName("asigLabel"); // NOI18N

        asigText.setText(resourceMap.getString("asigText.text")); // NOI18N
        asigText.setName("asigText"); // NOI18N

        asigButton.setText(resourceMap.getString("asigButton.text")); // NOI18N
        asigButton.setName("asigButton"); // NOI18N
        asigButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                asigButtonActionPerformed(evt);
            }
        });

        borrarAsigButton.setText(resourceMap.getString("borrarAsigButton.text")); // NOI18N
        borrarAsigButton.setEnabled(false);
        borrarAsigButton.setName("borrarAsigButton"); // NOI18N
        borrarAsigButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                borrarAsigButtonActionPerformed(evt);
            }
        });

        org.jdesktop.layout.GroupLayout asignaturaPanelLayout = new org.jdesktop.layout.GroupLayout(asignaturaPanel);
        asignaturaPanel.setLayout(asignaturaPanelLayout);
        asignaturaPanelLayout.setHorizontalGroup(
            asignaturaPanelLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(asignaturaPanelLayout.createSequentialGroup()
                .addContainerGap()
                .add(asignaturaPanelLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
                    .add(asignaturaPanelLayout.createSequentialGroup()
                        .add(asigLabel)
                        .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED, 111, Short.MAX_VALUE)
                        .add(asigText, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 240, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
                    .add(org.jdesktop.layout.GroupLayout.TRAILING, asignaturaPanelLayout.createSequentialGroup()
                        .add(borrarAsigButton)
                        .addPreferredGap(org.jdesktop.layout.LayoutStyle.UNRELATED)
                        .add(asigButton)))
                .addContainerGap())
        );
        asignaturaPanelLayout.setVerticalGroup(
            asignaturaPanelLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(asignaturaPanelLayout.createSequentialGroup()
                .addContainerGap()
                .add(asignaturaPanelLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
                    .add(asigLabel)
                    .add(asigText, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
                .add(asignaturaPanelLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
                    .add(asigButton)
                    .add(borrarAsigButton))
                .addContainerGap(88, Short.MAX_VALUE))
        );

        arribaTabbed.addTab(resourceMap.getString("asignaturaPanel.TabConstraints.tabTitle"), asignaturaPanel); // NOI18N

        temaPanel.setEnabled(false);
        temaPanel.setName("temaPanel"); // NOI18N

        temaLabel.setText(resourceMap.getString("temaLabel.text")); // NOI18N
        temaLabel.setName("temaLabel"); // NOI18N

        temaText.setText(resourceMap.getString("temaText.text")); // NOI18N
        temaText.setName("temaText"); // NOI18N

        temaButton.setText(resourceMap.getString("temaButton.text")); // NOI18N
        temaButton.setName("temaButton"); // NOI18N
        temaButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                temaButtonActionPerformed(evt);
            }
        });

        borrarTemaButton.setText(resourceMap.getString("borrarTemaButton.text")); // NOI18N
        borrarTemaButton.setEnabled(false);
        borrarTemaButton.setName("borrarTemaButton"); // NOI18N
        borrarTemaButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                borrarTemaButtonActionPerformed(evt);
            }
        });

        org.jdesktop.layout.GroupLayout temaPanelLayout = new org.jdesktop.layout.GroupLayout(temaPanel);
        temaPanel.setLayout(temaPanelLayout);
        temaPanelLayout.setHorizontalGroup(
            temaPanelLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(temaPanelLayout.createSequentialGroup()
                .addContainerGap()
                .add(temaLabel)
                .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED, 111, Short.MAX_VALUE)
                .add(temaPanelLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING, false)
                    .add(org.jdesktop.layout.GroupLayout.TRAILING, temaPanelLayout.createSequentialGroup()
                        .add(borrarTemaButton, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 120, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                        .add(temaButton))
                    .add(org.jdesktop.layout.GroupLayout.TRAILING, temaText, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 240, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
                .addContainerGap())
        );
        temaPanelLayout.setVerticalGroup(
            temaPanelLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(temaPanelLayout.createSequentialGroup()
                .addContainerGap()
                .add(temaPanelLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
                    .add(temaLabel)
                    .add(temaText, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
                .add(temaPanelLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
                    .add(temaButton)
                    .add(borrarTemaButton))
                .addContainerGap(88, Short.MAX_VALUE))
        );

        arribaTabbed.addTab(resourceMap.getString("temaPanel.TabConstraints.tabTitle"), temaPanel); // NOI18N

        abajoTabbed.setName("abajoTabbed"); // NOI18N

        preguntaPanel.setName("preguntaPanel"); // NOI18N

        preguntaLabel.setText(resourceMap.getString("preguntaLabel.text")); // NOI18N
        preguntaLabel.setName("preguntaLabel"); // NOI18N

        preguntaScrollPane.setName("preguntaScrollPane"); // NOI18N

        preguntaText.setColumns(20);
        preguntaText.setLineWrap(true);
        preguntaText.setRows(5);
        preguntaText.setWrapStyleWord(true);
        preguntaText.setAutoscrolls(false);
        preguntaText.setName("preguntaText"); // NOI18N
        preguntaScrollPane.setViewportView(preguntaText);

        preguntaButton.setText(resourceMap.getString("preguntaButton.text")); // NOI18N
        preguntaButton.setName("preguntaButton"); // NOI18N
        preguntaButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                preguntaButtonActionPerformed(evt);
            }
        });

        borrarPregButton.setText(resourceMap.getString("borrarPregButton.text")); // NOI18N
        borrarPregButton.setEnabled(false);
        borrarPregButton.setName("borrarPregButton"); // NOI18N
        borrarPregButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                borrarPregButtonActionPerformed(evt);
            }
        });

        org.jdesktop.layout.GroupLayout preguntaPanelLayout = new org.jdesktop.layout.GroupLayout(preguntaPanel);
        preguntaPanel.setLayout(preguntaPanelLayout);
        preguntaPanelLayout.setHorizontalGroup(
            preguntaPanelLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(preguntaPanelLayout.createSequentialGroup()
                .addContainerGap()
                .add(preguntaPanelLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
                    .add(org.jdesktop.layout.GroupLayout.TRAILING, preguntaPanelLayout.createSequentialGroup()
                        .add(borrarPregButton)
                        .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
                        .add(preguntaButton))
                    .add(preguntaScrollPane, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 388, Short.MAX_VALUE)
                    .add(preguntaLabel))
                .addContainerGap())
        );
        preguntaPanelLayout.setVerticalGroup(
            preguntaPanelLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(preguntaPanelLayout.createSequentialGroup()
                .addContainerGap()
                .add(preguntaLabel)
                .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
                .add(preguntaScrollPane, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 128, Short.MAX_VALUE)
                .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
                .add(preguntaPanelLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
                    .add(borrarPregButton)
                    .add(preguntaButton))
                .addContainerGap())
        );

        abajoTabbed.addTab(resourceMap.getString("preguntaPanel.TabConstraints.tabTitle"), preguntaPanel); // NOI18N

        respuestaPanel.setName("respuestaPanel"); // NOI18N

        respuestaLabel.setText(resourceMap.getString("respuestaLabel.text")); // NOI18N
        respuestaLabel.setName("respuestaLabel"); // NOI18N

        respuestaScrollPane.setName("respuestaScrollPane"); // NOI18N

        respuestaText.setColumns(20);
        respuestaText.setLineWrap(true);
        respuestaText.setRows(5);
        respuestaText.setWrapStyleWord(true);
        respuestaText.setName("respuestaText"); // NOI18N
        respuestaScrollPane.setViewportView(respuestaText);

        respuestaButton.setText(resourceMap.getString("respuestaButton.text")); // NOI18N
        respuestaButton.setName("respuestaButton"); // NOI18N
        respuestaButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                respuestaButtonActionPerformed(evt);
            }
        });

        borrarRespButton.setText(resourceMap.getString("borrarRespButton.text")); // NOI18N
        borrarRespButton.setEnabled(false);
        borrarRespButton.setName("borrarRespButton"); // NOI18N
        borrarRespButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                borrarRespButtonActionPerformed(evt);
            }
        });

        correctaCheckBox.setText(resourceMap.getString("correctaCheckBox.text")); // NOI18N
        correctaCheckBox.setName("correctaCheckBox"); // NOI18N

        org.jdesktop.layout.GroupLayout respuestaPanelLayout = new org.jdesktop.layout.GroupLayout(respuestaPanel);
        respuestaPanel.setLayout(respuestaPanelLayout);
        respuestaPanelLayout.setHorizontalGroup(
            respuestaPanelLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(respuestaPanelLayout.createSequentialGroup()
                .addContainerGap()
                .add(respuestaPanelLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
                    .add(respuestaScrollPane, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 388, Short.MAX_VALUE)
                    .add(respuestaPanelLayout.createSequentialGroup()
                        .add(respuestaLabel)
                        .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED, 293, Short.MAX_VALUE)
                        .add(correctaCheckBox))
                    .add(org.jdesktop.layout.GroupLayout.TRAILING, respuestaPanelLayout.createSequentialGroup()
                        .add(borrarRespButton)
                        .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
                        .add(respuestaButton)))
                .addContainerGap())
        );
        respuestaPanelLayout.setVerticalGroup(
            respuestaPanelLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(respuestaPanelLayout.createSequentialGroup()
                .addContainerGap()
                .add(respuestaPanelLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
                    .add(respuestaLabel)
                    .add(correctaCheckBox))
                .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
                .add(respuestaScrollPane, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 127, Short.MAX_VALUE)
                .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
                .add(respuestaPanelLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
                    .add(respuestaButton)
                    .add(borrarRespButton))
                .addContainerGap())
        );

        abajoTabbed.addTab(resourceMap.getString("respuestaPanel.TabConstraints.tabTitle"), respuestaPanel); // NOI18N

        org.jdesktop.layout.GroupLayout layout = new org.jdesktop.layout.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(layout.createSequentialGroup()
                .addContainerGap()
                .add(arbolPanel, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 185, Short.MAX_VALUE)
                .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
                .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
                    .add(abajoTabbed, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 413, Short.MAX_VALUE)
                    .add(arribaTabbed, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 413, Short.MAX_VALUE))
                .addContainerGap())
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(layout.createSequentialGroup()
                .addContainerGap()
                .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
                    .add(org.jdesktop.layout.GroupLayout.TRAILING, arbolPanel, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 409, Short.MAX_VALUE)
                    .add(org.jdesktop.layout.GroupLayout.TRAILING, layout.createSequentialGroup()
                        .add(arribaTabbed, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 176, Short.MAX_VALUE)
                        .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
                        .add(abajoTabbed, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 227, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)))
                .addContainerGap())
        );

        pack();
    }// </editor-fold>//GEN-END:initComponents

    private void asignaturasTreeValueChanged(javax.swing.event.TreeSelectionEvent evt) {//GEN-FIRST:event_asignaturasTreeValueChanged
        ultimoNodo = (DefaultMutableTreeNode) asignaturasTree.getLastSelectedPathComponent();
        if (ultimoNodo != null) {
            borrarTextos();
            int profundidad = ultimoNodo.getLevel();
            switch (profundidad) {
                case 0:
                    cambiarAsignatura(true);
                    cambiarTema(false);
                    cambiarPregunta(false);
                    cambiarRespuesta(false);
                    borrarAsigButton.setEnabled(false);
                    borrarTemaButton.setEnabled(false);
                    borrarPregButton.setEnabled(false);
                    borrarRespButton.setEnabled(false);
                    arribaTabbed.setSelectedIndex(0);
                    break;
                case 1:
                    cambiarAsignatura(true);
                    asigButton.setEnabled(false);
                    asigText.setText(ultimoNodo.toString());
                    cambiarTema(true);
                    cambiarPregunta(false);
                    cambiarRespuesta(false);
                    borrarAsigButton.setEnabled(true);
                    borrarTemaButton.setEnabled(false);
                    borrarPregButton.setEnabled(false);
                    borrarRespButton.setEnabled(false);
                    arribaTabbed.setSelectedIndex(0);
                    break;
                case 2:
                    cambiarAsignatura(false);
                    cambiarTema(true);
                    temaButton.setEnabled(false);
                    temaText.setText(ultimoNodo.toString());
                    cambiarPregunta(true);
                    cambiarRespuesta(false);
                    borrarAsigButton.setEnabled(false);
                    borrarTemaButton.setEnabled(true);
                    borrarPregButton.setEnabled(false);
                    borrarRespButton.setEnabled(false);
                    arribaTabbed.setSelectedIndex(1);
                    abajoTabbed.setSelectedIndex(0);
                    break;
                case 3:
                    cambiarAsignatura(false);
                    cambiarTema(false);
                    cambiarPregunta(true);
                    preguntaButton.setEnabled(false);
                    preguntaText.setText(ultimoNodo.toString());
                    cambiarRespuesta(true);
                    borrarAsigButton.setEnabled(false);
                    borrarTemaButton.setEnabled(false);
                    borrarPregButton.setEnabled(true);
                    borrarRespButton.setEnabled(false);
                    abajoTabbed.setSelectedIndex(0);
                    break;
                case 4:
                    cambiarAsignatura(false);
                    cambiarTema(false);
                    cambiarPregunta(false);
                    cambiarRespuesta(true);
                    respuestaButton.setEnabled(false);
                    respuestaText.setText(ultimoNodo.toString());
                    borrarAsigButton.setEnabled(false);
                    borrarTemaButton.setEnabled(false);
                    borrarPregButton.setEnabled(false);
                    borrarRespButton.setEnabled(true);
                    abajoTabbed.setSelectedIndex(1);
                    Respuesta r = (Respuesta) ultimoNodo.getUserObject();
                    correctaCheckBox.setSelected(r.isEsCorrecta());
                    break;
            }
        }
    }//GEN-LAST:event_asignaturasTreeValueChanged

    private void asigButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_asigButtonActionPerformed
        try {
            // TODO add your handling code here:
            if (!this.asigText.getText().trim().isEmpty()) {
                if (!this.fachada.insertarAsignatura(this.asigText.getText())) {
                    JOptionPane.showMessageDialog(null,"Se ha producido un error al insertar la asignatura","Error",JOptionPane.ERROR_MESSAGE);
                }
            } else {
                JOptionPane.showMessageDialog(null, "Introduzca el nombre");
            }
        } catch (SQLException ex) {
            System.out.println("Class_Not_Found_Exception: " + ex.getMessage());
        } catch (ClassNotFoundException ex) {
            System.out.println("SQL_Exception: " + ex.getMessage());
        }
    }//GEN-LAST:event_asigButtonActionPerformed

    private void temaButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_temaButtonActionPerformed
        // TODO add your handling code here:
        try {
            // TODO add your handling code here:
            if (!this.temaText.getText().trim().isEmpty()) {
                if (!this.fachada.insertarTema(this.temaText.getText(), ultimoNodo)) {
                    JOptionPane.showMessageDialog(null,"Se ha producido un error al insertar el tema","Error",JOptionPane.ERROR_MESSAGE);
                }
            } else {
                JOptionPane.showMessageDialog(null, "Introduzca el nombre");
            }
        } catch (SQLException ex) {
            System.out.println("Class_Not_Found_Exception: " + ex.getMessage());
        } catch (ClassNotFoundException ex) {
            System.out.println("SQL_Exception: " + ex.getMessage());
        }
    }//GEN-LAST:event_temaButtonActionPerformed

    private void borrarAsigButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_borrarAsigButtonActionPerformed
        // TODO add your handling code here:
        try {
            // TODO add your handling code here:
            if (!this.fachada.borrarAsignatura(this.ultimoNodo)) {
                JOptionPane.showMessageDialog(null,"Se ha producido un error al borrar la asignatura","Error",JOptionPane.ERROR_MESSAGE);
            }
        } catch (SQLException ex) {
            System.out.println("Class_Not_Found_Exception: " + ex.getMessage());
        } catch (ClassNotFoundException ex) {
            System.out.println("SQL_Exception: " + ex.getMessage());
        }
    }//GEN-LAST:event_borrarAsigButtonActionPerformed

    private void borrarTemaButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_borrarTemaButtonActionPerformed
        // TODO add your handling code here:
        try {
            // TODO add your handling code here:
            if (!this.fachada.borrarTema(this.ultimoNodo)) {
                JOptionPane.showMessageDialog(null,"Se ha producido un error al borrar el tema","Error",JOptionPane.ERROR_MESSAGE);
            }
        } catch (SQLException ex) {
            System.out.println("Class_Not_Found_Exception: " + ex.getMessage());
        } catch (ClassNotFoundException ex) {
            System.out.println("SQL_Exception: " + ex.getMessage());
        }
    }//GEN-LAST:event_borrarTemaButtonActionPerformed

    private void preguntaButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_preguntaButtonActionPerformed
        // TODO add your handling code here:
        try {
            // TODO add your handling code here:
            if (!this.preguntaText.getText().trim().isEmpty()) {
                if (!this.fachada.insertarPregunta(this.preguntaText.getText(), this.ultimoNodo)) {
                    JOptionPane.showMessageDialog(null,"Se ha producido un error al insertar la pregunta","Error",JOptionPane.ERROR_MESSAGE);
                }
            } else {
                System.out.println("Inserte el enunciado");
            }
        } catch (SQLException ex) {
            System.out.println("Class_Not_Found_Exception: " + ex.getMessage());
        } catch (ClassNotFoundException ex) {
            System.out.println("SQL_Exception: " + ex.getMessage());
        }
    }//GEN-LAST:event_preguntaButtonActionPerformed

    private void borrarPregButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_borrarPregButtonActionPerformed
        // TODO add your handling code here:
        try {
            // TODO add your handling code here:
            if (!this.fachada.borrarPregunta(this.ultimoNodo)) {
                System.out.println("Error al borrar pregunta");
            }
        } catch (SQLException ex) {
            System.out.println("Class_Not_Found_Exception: " + ex.getMessage());
        } catch (ClassNotFoundException ex) {
            System.out.println("SQL_Exception: " + ex.getMessage());
        }
    }//GEN-LAST:event_borrarPregButtonActionPerformed

    private void respuestaButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_respuestaButtonActionPerformed
        try {
            if (validarRespuesta()) {
                if (!this.fachada.insertarRespuesta(this.respuestaText.getText(), this.correctaCheckBox.isSelected(), this.ultimoNodo)) {
                    System.out.println("Error al insertar respuesta");
                }
            }
        } catch (SQLException ex) {
            System.out.println("Class_Not_Found_Exception: " + ex.getMessage());
        } catch (ClassNotFoundException ex) {
            System.out.println("SQL_Exception: " + ex.getMessage());
        }
    }//GEN-LAST:event_respuestaButtonActionPerformed

    private void borrarRespButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_borrarRespButtonActionPerformed
        // TODO add your handling code here:
        try {
            // TODO add your handling code here:
            if (!this.fachada.borrarRespuesta(this.ultimoNodo)) {
                System.out.println("Error al borrar respuesta");
            }
        } catch (SQLException ex) {
            System.out.println("Class_Not_Found_Exception: " + ex.getMessage());
        } catch (ClassNotFoundException ex) {
            System.out.println("SQL_Exception: " + ex.getMessage());
        }
    }//GEN-LAST:event_borrarRespButtonActionPerformed
    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JTabbedPane abajoTabbed;
    private javax.swing.JScrollPane arbolPanel;
    private javax.swing.JTabbedPane arribaTabbed;
    private javax.swing.JButton asigButton;
    private javax.swing.JLabel asigLabel;
    private javax.swing.JTextField asigText;
    private javax.swing.JPanel asignaturaPanel;
    private javax.swing.JTree asignaturasTree;
    private javax.swing.JButton borrarAsigButton;
    private javax.swing.JButton borrarPregButton;
    private javax.swing.JButton borrarRespButton;
    private javax.swing.JButton borrarTemaButton;
    private javax.swing.JCheckBox correctaCheckBox;
    private javax.swing.JButton preguntaButton;
    private javax.swing.JLabel preguntaLabel;
    private javax.swing.JPanel preguntaPanel;
    private javax.swing.JScrollPane preguntaScrollPane;
    private javax.swing.JTextArea preguntaText;
    private javax.swing.JButton respuestaButton;
    private javax.swing.JLabel respuestaLabel;
    private javax.swing.JPanel respuestaPanel;
    private javax.swing.JScrollPane respuestaScrollPane;
    private javax.swing.JTextArea respuestaText;
    private javax.swing.JButton temaButton;
    private javax.swing.JLabel temaLabel;
    private javax.swing.JPanel temaPanel;
    private javax.swing.JTextField temaText;
    // End of variables declaration//GEN-END:variables

    public void update(Observable o, Object arg) {
        if (o == this.usuario) {
            DefaultMutableTreeNode top = new DefaultMutableTreeNode("Asignaturas");
            createNodes(top);
            DefaultTreeModel modelo = new DefaultTreeModel(top);
            //TreeModel model=new DefaultTreeModel(top);
            this.asignaturasTree.setModel(modelo);
            borrarTextos();
            cambiarAsignatura(false);
            cambiarTema(false);
            cambiarPregunta(false);
            cambiarRespuesta(false);
            borrarAsigButton.setEnabled(false);
            borrarTemaButton.setEnabled(false);
            borrarPregButton.setEnabled(false);
            borrarRespButton.setEnabled(false);
            this.correctaCheckBox.setSelected(false);
            expandAll(asignaturasTree, true);
        }
    }
    
    private boolean validarRespuesta() {
        boolean insertar = true;
        String msg = "";
        if (!this.respuestaText.getText().trim().isEmpty()) {
            Pregunta pregunta = (Pregunta) ultimoNodo.getUserObject();
            boolean correcta = correctaCheckBox.isSelected();
            int numRespuestas = pregunta.getNumRespuestas();

            if (numRespuestas < 3) {
                if (pregunta.tieneRespuestaCorrecta() && correcta) {
                    insertar = false;
                    msg = "La pregunta ya tiene una respuesta correcta";
                }
            } else if (numRespuestas == 3) {
                if (pregunta.tieneRespuestaCorrecta() && correcta) {
                    insertar = false;
                    msg = "La pregunta ya tiene una respuesta correcta";
                } 
                if (!pregunta.tieneRespuestaCorrecta() && !correcta) {
                    insertar = false;
                    msg = "La pregunta no tiene ninguna respuesta correcta";
                }
            } else {
                insertar = false;
                msg = "La pregunta sólo puede tener cuatro respuestas";
            }
        } else {
            insertar = false;
            msg = "inserte un enunciado";
        }
        System.out.println(msg);
        return insertar;
    }

    /**
     * Establece lenguaje
     */
    public void setLenguaje() {
        asigButton.setText(Messages.getString("asigButton.text", Messages.BUNDLE_NAME_ASIGNATURAS));
        asigLabel.setText(Messages.getString("asigLabel.text", Messages.BUNDLE_NAME_ASIGNATURAS));
        borrarAsigButton.setText(Messages.getString("borrarAsigButton.text", Messages.BUNDLE_NAME_ASIGNATURAS));
        borrarPregButton.setText(Messages.getString("borrarPregButton.text", Messages.BUNDLE_NAME_ASIGNATURAS));
        borrarRespButton.setText(Messages.getString("borrarRespButton.text", Messages.BUNDLE_NAME_ASIGNATURAS));
        borrarTemaButton.setText(Messages.getString("borrarTemaButton.text", Messages.BUNDLE_NAME_ASIGNATURAS));
        correctaCheckBox.setText(Messages.getString("correctaCheckBox.text", Messages.BUNDLE_NAME_ASIGNATURAS));
        preguntaButton.setText(Messages.getString("preguntaButton.text", Messages.BUNDLE_NAME_ASIGNATURAS));
        preguntaLabel.setText(Messages.getString("preguntaLabel.text", Messages.BUNDLE_NAME_ASIGNATURAS));
        respuestaButton.setText(Messages.getString("respuestaButton.text", Messages.BUNDLE_NAME_ASIGNATURAS));
        respuestaLabel.setText(Messages.getString("respuestaLabel.text", Messages.BUNDLE_NAME_ASIGNATURAS));
        temaButton.setText(Messages.getString("temaButton.text", Messages.BUNDLE_NAME_ASIGNATURAS));
        temaLabel.setText(Messages.getString("temaLabel.text", Messages.BUNDLE_NAME_ASIGNATURAS));
        arribaTabbed.setTitleAt(0, Messages.getString("asignaturaPanel.TabConstraints.tabTitle", Messages.BUNDLE_NAME_ASIGNATURAS));
        arribaTabbed.setTitleAt(1, Messages.getString("temaPanel.TabConstraints.tabTitle", Messages.BUNDLE_NAME_ASIGNATURAS));
        abajoTabbed.setTitleAt(0, Messages.getString("preguntaPanel.TabConstraints.tabTitle", Messages.BUNDLE_NAME_ASIGNATURAS));
        abajoTabbed.setTitleAt(1, Messages.getString("respuestaPanel.TabConstraints.tabTitle", Messages.BUNDLE_NAME_ASIGNATURAS));
        setTitle(Messages.getString("Form.title", Messages.BUNDLE_NAME_ASIGNATURAS));
    }
}
